//
//  WmcHomeVM+Authorized.swift
//  YPWatermarkCamera
//
//  Created by 赵新 on 2022/8/16.
//

import UIKit
import YPBedrock

extension WmcHomeVM {
    /// 请求权限调度
    func alertScheduler() {
        authorizedScheduler.appendBackTasks([
            locationTask(),
            cameraTask()
//            photoAlbumTask(),
        ])
        // 开始调度
        authorizedScheduler.run(with: nil)
    }

    /// 相册权限
    func photoAlbumTask() -> YPSchedulerTask<Any> {
        let task: YPSchedulerTask<Any> = .init(identifier: "authorized.photoAlbum", eventBlock: { currentTask, globalObj, completeBlock in
            // 判断权限
            let cameraStatus = WmcAuthorizedManager.photoAlbum()
            if cameraStatus.info.isAvailable { // 有权限，则跳过
                completeBlock(false) // 通知跳过
            } else { // 需要执行权限请求业务
                WmcAuthorizedManager.photoAlbumRequest { status in
                    if status.info.isAvailable { // 有权限
                        completeBlock(false) // 通知跳过
                    } else { // 无权，业务没要求，暂不处理
                        completeBlock(true)
                    }
                }
            }
        })
        return task
    }

    /// 相机权限弹窗
    func cameraTask() -> YPSchedulerTask<Any> {
        let task: YPSchedulerTask<Any> = .init(identifier: "authorized.camera") { [weak self] currentTask, globalObj, completeBlock in
            guard let weakSelf = self else { return }
            // 判断权限
            let cameraStatus = WmcAuthorizedManager.camera()
            if cameraStatus.info.isAvailable { // 有权限，则跳过
                completeBlock(false) // 通知跳过
                weakSelf.addCameraViewRelay.accept(()) // 添加相机视图
            } else { // 需要执行权限请求业务
                WmcAuthorizedManager.cameraRequest { [weak self] status in
                    guard let weakSelf = self else { return }
                    if status.info.isAvailable { // 有权限
                        completeBlock(false) // 通知跳过
                        weakSelf.addCameraViewRelay.accept(()) // 添加相机视图
                    } else { // 无权，业务没要求，暂不处理
                        completeBlock(true)
                    }
                }
            }
        }
        return task
    }

    /// 定位权限弹窗任务
    func locationTask() -> YPSchedulerTask<Any> {
        let task: YPSchedulerTask<Any> = .init(identifier: "authorized.location") { [weak self] scheduler, task, completeBlock in
            guard let weakSelf = self else { return }
            // 判断定位状态
            var bol = true
            let locationStatus = WmcAuthorizedManager.location()
            if locationStatus.info.isAvailable { // 有权限
                bol = true // 需要执行任务
            } else { // 如果没有权限
//                let alert = WmcAlertView()
//                alert.title = "提示"
//                alert.contentLabel.textColor = .wmc_grayH2_323233
//                alert.msg = "在您使用添加含有地理位置水印的功能时，需要您同意授权地理位置权限"
//                let okTitle = locationStatus == .notDetermined ? "同意" : "前往设置"
//                alert.style = .custom(confirmTitle: okTitle, cancelTitle: "拒绝")
//                alert.confirmBlock = { [weak self] in
//                    guard let self = self else { return }
//                    if locationStatus == .notDetermined {
//
//                    } else {
//                        // 跳转设置
//                        bol = false
//                        self.locationNotAuthorized?() // 未获取权限回调
//                    }
//                }
//                alert.show()
                
                bol = false
                weakSelf.locationNotAuthorized?() // 未获取权限回调
                // 定位权限
//                WmcAuthorizedManager.locationRequest { [weak self] status in
//                    guard let weakSelf = self else { return }
//                    if status.info.isAvailable { // 有权限
//                        bol = true // 需要执行任务
//                    } else {
//                        bol = false // 通知跳过
//                        weakSelf.locationNotAuthorized?() // 未获取权限回调
//                    }
//                }
                
            }
            if bol {
                WmcLocationManager.startLocation() // 开始定位
                weakSelf.locationTipsDismiss.accept(())
            } else {
                weakSelf.locationTipsUnauthorized.accept(())
            }
            completeBlock(bol)
        }
        return task
    }
}
